﻿// Gateway.Api 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
// 
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
// 
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

using Aurora.AI.SqlSugar.Framework;
using Aurora.AI.Wiki.Domain.Domain.ChatApplications.Aggregates;
using SqlSugar;

namespace Aurora.AI.Wiki.Domain.DataAccess.Mapping;

/// <summary>
/// chat application mapping
/// </summary>
public class ChatApplicationMapping : IEntityMapping<ChatApplication>
{
    public void EntityServiceMapping(EntityColumnable<ChatApplication> entityColumnInfo)
    {
        entityColumnInfo.UpdateProperty(it => it.Id, it =>
        {
            it.IsPrimarykey = true;
            it.DataType = "varchar(50)";
            it.ColumnDescription = "主键标识";
        }).UpdateProperty(it => it.Name, it =>
        {
            it.DataType = "varchar(50)";
            it.ColumnDescription = "名称";
            it.IsNullable = false;
        })
        .UpdateProperty(it => it.ChatType, it =>
            {
                it.DataType = "varchar(10)";
                it.ColumnDescription = "应用类型 chat images";
                it.IsNullable = false;
                it.DefaultValue = "chat";
            })
            .UpdateProperty(it => it.Prompt, it =>
        {
            it.DataType = "varchar(2000)";
            it.ColumnDescription = "提示词";
            it.IsNullable = true;
        }).UpdateProperty(it => it.ChatModel, it =>
        {
            it.DataType = "varchar(50)";
            it.ColumnDescription = "对话模型";
        }).UpdateProperty(it => it.Temperature, it =>
        {
            it.DataType = "double";
            it.ColumnDescription = "温度";
        }).UpdateProperty(it => it.MaxResponseToken, it =>
        {
            it.DataType = "int";
            it.ColumnDescription = "最大响应Token数量";
        }).UpdateProperty(it => it.Template, it =>
        {
            it.DataType = "varchar(2000)";
            it.ColumnDescription = "模板";
            it.IsNullable = true;
        }).UpdateProperty(it => it.Parameter, it =>
        {
            it.DataType = "varchar(2000)";
            it.ColumnDescription = "参数 json 格式";
            it.IsNullable = true;
        }).UpdateProperty(it => it.Opener, it =>
        {
            it.DataType = "varchar(2000)";
            it.ColumnDescription = "Opener";
            it.IsNullable = true;
        }).UpdateProperty(it => it.WikiIds, it =>
        {
            it.DataType = "varchar(500)";
            it.ColumnDescription = "关联的知识库  集合，以逗号分割";
            it.IsNullable = true;
        }).UpdateProperty(it => it.ReferenceUpperLimit, it =>
        {
            it.DataType = "int";
            it.ColumnDescription = "引用上限";
        }).UpdateProperty(it => it.Relevancy, it =>
        {
            it.DataType = "double";
            it.ColumnDescription = "匹配相似度";
        }).UpdateProperty(it => it.NoReplyFoundTemplate, it =>
        {
            it.DataType = "varchar(2000)";
            it.ColumnDescription = "未找到的回答模板 如果模板为空则使用Chat对话模型回答。";
            it.IsNullable = true;
        }).UpdateProperty(it => it.ShowSourceFile, it =>
        {
            it.DataType = "bit";
            it.ColumnDescription = "显示引用文件";
            it.IsNullable = false;
            it.DefaultValue = "0";
        }).UpdateProperty(it => it.Extend, it =>
        {
            it.DataType = "varchar(2000)";
            it.ColumnDescription = "扩展字段  json  格式";
            it.IsNullable = true;
        }).UpdateProperty(it => it.FunctionIds, it =>
        {
            it.DataType = "varchar(1000)";
            it.ColumnDescription = "function call ids  多个以逗号分割";
            it.IsNullable = true;
        })
        .UpdateProperty(it => it.ImageAnalysisModel, it =>
        {
            it.DataType = "varchar(200)";
            it.ColumnDescription = "图片分析模型*（将图片用文字描述）";
            it.IsNullable = true;
        })
        .UpdateProperty(it => it.ImageAnalysisPrompt, it =>
        {
            it.DataType = "varchar(1000)";
            it.ColumnDescription = "图片分析模型提示词*（将图片用文字描述）";
            it.IsNullable = true;
        }).UpdateProperty(it => it.EnableWebSearch, it =>
        {
            it.DataType = "bit";
            it.ColumnDescription = "图片分析模型*（将图片用文字描述）";
            it.IsNullable = false;
            it.DefaultValue = "0";
        })
        .UpdateProperty(it => it.Creator, it =>
        {
            it.DataType = "varchar(50)";
            it.ColumnDescription = "创建人";
            it.IsNullable = true;
        }).UpdateProperty(it => it.CreationTime, it =>
        {
            it.DataType = "datetime";
            it.ColumnDescription = "创建时间";
            it.IsNullable = true;
        }).UpdateProperty(it => it.Modifier, it =>
        {
            it.DataType = "varchar(50)";
            it.ColumnDescription = "修改人";
            it.IsNullable = true;
        }).UpdateProperty(it => it.ModificationTime, it =>
        {
            it.DataType = "datetime";
            it.ColumnDescription = "修改时间";
            it.IsNullable = true;
        }).UpdateProperty(it => it.IsDeleted, it =>
        {
            it.DataType = "bit";
            it.ColumnDescription = "是否删除 0 未删除 1已删除";
            it.DefaultValue = "0";
            it.IsNullable = true;
        });
    }

    public void EntityNameServiceMapping(EntityInfo entityInfo)
    {
        entityInfo.DbTableName = MappingConstant.TableNamePrefix + "chat-application";
        entityInfo.TableDescription = "对话应用";
    }
}